home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / UTIL / DESKTOP / PATCH / !WimpPatch / PatchAll (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1995-01-18  |  7KB  |  264 lines

  1.  >PatchAll
  2.  By The Moog
  3. 1995 Matthew Godbolt
  4. $;" at line ";
  5.  "OS_Module",18,"WindowManager" 
  6.  ,,,WimpMod
  7.  code% &2000
  8.  pass%=4 
  9. O%=code%
  10. [OPT pass%
  11. EQUD    0
  12. EQUD    init
  13. EQUD    final
  14. EQUD    0
  15. EQUD    title
  16. EQUD    help
  17. EQUD    0
  18. EQUD    0
  19. EQUD    0
  20. EQUD    0
  21. EQUD    0
  22. .title
  23. EQUS    "PatchAll"
  24. EQUB    0
  25.     .help
  26. DEQUS    "PatchAll"+
  27. 9+"1.10 (12 Jul 1993) 
  28. 1995 Matthew Godbolt"
  29. EQUB    0
  30.     ALIGN
  31.      .init
  32. STMFD   R13!,{R0,R1,R14}
  33. MOV     R1,#8
  34. LDR     R0,[R1]
  35. STR     R0,oldbranch
  36. ADR     R1,myjump-8
  37. SUB     R0,R0,R1,LSR #2
  38. STR     R0,myjump
  39. ADR     R0,myswihand-&10
  40. MOV     R0,R0,LSR #2
  41. R     R0,R0,#&EA000000
  42. MOV     R1,#8
  43. STR     R0,[R1]
  44. ADR     R1,fontname
  45. MOV     R2,#13*16
  46. MOV     R3,#13*16
  47. MOV     R4,#0
  48. MOV     R5,#0
  49. SWI     "XFont_FindFont"
  50. MVNVS   R0,#0
  51. STR     R0,myfonthandle
  52. LDMFD   R13!,{R0,R1,PC}
  53. .zox    EQUD 0
  54. 72.fontname       EQUS"Trinity.Medium"+
  55. 13:ALIGN
  56. .myfonthandle   EQUD0
  57. .myjump       B &1F033C0
  58. .final
  59. STMFD   R13!,{R0,R1,R14}
  60. LDR     R0,oldbranch
  61. MOV     R1,#8
  62. STR     R0,[R1]
  63. LDR     R0,myfonthandle
  64. SWI     "XFont_LoseFont"
  65. B;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
  66. LDMFD   R13!,{R0,R1,PC}^
  67. D".oldbranch      EQUD &EA6051CD
  68. .Mow EQUD &0
  69. .myswihand
  70. STMFD   R13!,{R10,R14}
  71. BIC     R14,R14,#&FC000003
  72. LDR     R14,[R14,#-4]
  73. BIC     R14,R14,#&FF000000
  74. STR R14,Mow
  75. BIC     R14,R14,#&20000
  76. N)LDR R10,ploticon:CMP R14,R10:BEQ Plot
  77. O&LDR R10,ospl:CMP R14,R10:BEQ Write
  78. P)LDR R10,ClrBack:CMP R14,R10:BEQ Clear
  79. LDR R10,CreateM:CMP R14,R10
  80. R!LDMFD R13!,{R10,R14}:B myjump
  81. .Swi_cm
  82. LDMFD R13!,{R10,R14}
  83. STMFD R13!,{R0-R12,R14}
  84. BL Jacob
  85. LDMFD R13!,{R0-R12,R14}
  86. B myjump
  87. .Jacob
  88. STMFD R13!,{R14}
  89. \ TST R1,#3:LDMNEFD R13!,{PC}^
  90. ADD R1,R1,#28
  91. .Flopsy
  92. LDR R0,[R1,#8]
  93. `+LDRB R2,myfonthandle:BIC R0,R0,#&FF<<24
  94. R R0,R0,R2,LSL #24
  95. R R0,R0,#1<<6
  96. STR R0,[R1,#8]
  97. dSLDR R0,[R1,#4]:MOVS R0,R0:CMNNE R0,#1:BEQ NotIndied:CMP R0,#&8000:BLT NotIndied
  98. e8STMFD R13!,{R1}:SWI "OS_ValidateAddress":MOVCC R1,R0
  99. BLCC Jacob:LDMFD R13!,{R1}
  100. .NotIndied
  101. LDR R0,[R1]
  102. ADD R1,R1,#24
  103. TST R0,#&80:BEQ Flopsy
  104. LDMFD R13!,{PC}^
  105. .ploticon EQUD &400E2
  106. .ClrBack EQUD 256+16
  107. .CreateM EQUD &400D4
  108. .ospl EQUD &45
  109. .Word EQUD &E59AE05C
  110. .Wind EQUS "Wind"
  111. .Clear
  112. LDMFD R13!,{R10,R14}
  113. STMFD R13!,{R0-R12,R14}
  114. CMP R0,#1:BNE Normal
  115. y1LDR R0,[R10]:LDR R1,Wind:CMP R0,R1:BNE Normal
  116. z(LDR R0,[R10,#4]:CMN R0,#1:BEQ Normal
  117. {(BIC R14,R14,#&FC000003:LDR R14,[R14]
  118. |%LDR R0,Word:CMP R0,R14:BNE Normal
  119. LDR R0,[R10,#88]
  120. ~ORSB R6,R0,#0:.shpondle ADD R14,R6,#512:CMP R14,R2:MOVLT R6,R14:BLT shpondle
  121. LDR R0,[R10,#92]
  122. MRSB R7,R0,#0:.shpondle SUB R14,R7,#256:CMP R14,R3:MOV R7,R14:BGT shpondle
  123. =MVN R0,#0:MOV R1,#9:SWI "XOS_ReadModeVariable":BVS Normal
  124. MVN R1,#0
  125. CMP R2,#0:ADREQ R1,Mode0
  126. CMP R2,#2:ADREQ R1,Mode12
  127. CMP R2,#3:ADREQ R1,Mode15
  128. CMN R1,#1:BEQ Normal
  129. LDR R14,ModeLoad
  130. CMP R14,R2:BEQ DontLoad
  131. STMFD R13!,{R0-R7}
  132. ;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
  133. MOV R0,#5:LDR R1,[R13,#4]
  134. CMOV R2,#0:MOV R3,#0:SWI "XOS_File":ADDVS R13,R13,#32:BVS Normal
  135. HADD R3,R4,#4:MOV R0,#6:SWI "XOS_Module":ADDVS R13,R13,#32:BVS Normal
  136. "STR R2,SpriteAt:STR R4,[R2],#4
  137. =LDR R1,[R13,#4]:MOV R0,#&FF:MOV R3,#0:MOV R4,#0:MOV R5,#0
  138. %SWI "XOS_File":LDMFD R13!,{R0-R7}
  139. STR R2,ModeLoad
  140. .DontLoad
  141. MOV R8,R4:MOV R9,R5
  142. MOV R0,#&22:
  143. R R0,R0,#&100
  144. LDR R1,SpriteAt
  145. ADR R2,Backg
  146. !MOV R3,R6:MOV R4,R7:MOV R5,#0
  147.     .Loop
  148. STMFD R13!,{R0-R5}
  149. SWI "XOS_SpriteOp"
  150. LDMFD R13!,{R0-R5}
  151. BVS Normal
  152. %ADD R3,R3,#512:CMP R3,R8:BLT Loop
  153. /MOV R3,R6:ADD R4,R4,#256:CMP R4,R9:BLT Loop
  154. LDMFD R13!,{R0-R12,R14}
  155. MOVS PC,R14
  156. .Normal
  157. LDMFD R13!,{R0-R12,R14}
  158. B myjump
  159. %.Backg EQUS "background"+
  160. 0:ALIGN
  161. .ModeLoad EQUD -1
  162. .SpriteAt EQUD 0
  163. :.Mode0 EQUS "<Patch$Dir>.WindowDrop.Sprites0"+
  164. 0:ALIGN
  165. <.Mode12 EQUS "<Patch$Dir>.WindowDrop.Sprites12"+
  166. 0:ALIGN
  167. <.Mode15 EQUS "<Patch$Dir>.WindowDrop.Sprites15"+
  168. 0:ALIGN
  169. .Word2 LDR R14,[R12,#84]
  170. .Word3 EQUD &0A00000C
  171. .Bonga EQUD 0
  172. .WriteMen EQUD &70D0121
  173. .Write
  174. LDMFD R13!,{R10,R14}
  175. STMFD R13!,{R0-R12,R14}
  176. ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
  177. &LDR R4,Word2:CMP R4,R14:BNE Normal
  178. LDR R14,[R13,#64]
  179. ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
  180. &LDR R4,Word3:CMP R4,R14:BNE Normal
  181. CMP R0,#4:BNE Normal
  182. 7LDR R2,[R13,#60]:LDR R14,[R13,#56]:
  183.  R9,R14,#&F<<12
  184. CMP R9,#12<<12:BGE Normal
  185. )LDR R9,WriteMen:CMP R14,R9:BEQ Normal
  186. STMFD R13!,{R0-R2,R14}
  187. BMOV R0,#&87:SWI "XOS_Byte":LDMVSFD R13!,{R0-R2,R14}:BVS Normal
  188. /LDRB R0,ModeLast:CMP R0,R2:STRB R2,ModeLast
  189. BEQ Already
  190. STMFD R13!,{R0-R5}
  191. -LDRB R0,myfonthandle:SWI "XFont_LoseFont"
  192. ADR     R1,fontname
  193. MOV     R2,#13*16
  194. MOV     R3,#13*16
  195. MOV     R4,#0
  196. MOV     R5,#0
  197. SWI     "XFont_FindFont"
  198. MVNVS   R0,#0
  199. STR     R0,myfonthandle
  200. LDMFD R13!,{R0-R5}
  201. .Already
  202. LDMFD R13!,{R0-R2,R14}
  203. #TST R14,#2:
  204. Q R9,#0:MOVNE R9,#8
  205. 1CMP R9,#0:BNE h:TST R14,#&200:MOVNE R9,#16:.h
  206. F.loop LDRB R0,[R2],#1:CMP R0,#32:ADDCS R1,R1,R9:BCS loop:STR R1,Bo
  207. OLDR R1,[R13,#56]:LDR R2,[R13,#60]:LDRB R0,myfonthandle:BIC R1,R1,#&FF000000
  208. R R1,R1,R0,LSL #24
  209. R R1,R1,#&40:
  210. bl(&78E8):LDR R1,Bo
  211. #CMP R9,#8:SUBEQ R1,R1,R4,LSR #1
  212. CMP R9,#16:SUBEQ R1,R1,R4
  213. STR R1,Bo
  214. LDR R1,[R13,#56]
  215. (MOV R9,R1,LSR #28:STRB R9,[R12,#124]
  216.  R14,R1,#&F000000
  217. MOVS R14,R14,LSR #24
  218. CMPEQ R9,#0:
  219. Q R14,#7
  220. STRB R14,[R12,#123]
  221. bl(&7348)
  222. BVS Normal
  223. LDMFD R13!,{R0-R12,R14}
  224. 0MOV R0,#&D4:LDR R1,Bo:SUB R2,R2,#22:B myjump
  225. .Bo &0
  226. .ModeLast EQUD 
  227. .Wordx LDRB R14,[R4,#40]
  228.     .Plot
  229. LDMFD R13!,{R10,R14}
  230. STMFD R13!,{R0-R12,R14}
  231. ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
  232. &LDR R7,Wordx:CMP R7,R14:BNE Normal
  233. @LDR R14,[R1,#&18]:LDRB R14,[R14,#1]:CMP R14,#
  234. "d":BNE Normal
  235. ILDR R0,[R4,#4]:ADR R7,Moglin:.CopLp LDRB R14,[R0],#1:STRB R14,[R7],#1
  236. 8CMP R14,#0:BNE CopLp:MOV R14,#
  237. ".":STRB R14,[R7,#-1]
  238. FLDR R0,[R1,#&14]:.CopLp LDRB R14,[R0],#1:CMP R14,#0:CMPNE R14,#&0D
  239. Q R14,#0:STRB R14,[R7],#1
  240. BNE CopLp
  241. LDR R0,[R12,#8]
  242. .RepLp
  243.  TEQ R0,#&40000001:BEQ Normal
  244.  ADR R7,Moglin:LDR R6,[R0,#4]
  245. /.SeeIfSame LDRB R5,[R7],#1:LDRB R14,[R6],#1
  246. "TEQ R14,#0:TEQEQ R5,#0:BEQ Yes
  247. (CMP R14,R5:BEQ SeeIfSame:BNE NextOne
  248. CLDMIA R1,{R0-R7}:ADR R6,open_dir:ADR R14,Brea:STMIA R14,{R0-R7}
  249. LDMFD R13!,{R0-R12,R14}
  250. ADR R1,Brea:B myjump
  251.  .NextOne LDR R0,[R0]:B RepLp
  252. ).open_dir EQUS "sdirectoryo"+
  253. 0:ALIGN
  254. $.Brea ]:P%+=64:O%+=64:[OPT pass%
  255. .Moglin
  256. ]P%+=256:O%+=256
  257.  "OS_File",10,"<Patch$Dir>.AllPatch",&FFA,,code%,O%
  258. bl(addr)
  259. [OPT pass%
  260. ADR R14,P%+16
  261. R R14,R14,#3
  262. LDR PC,P%+4
  263. EQUD WimpMod+addr
  264.